Spring JDBC একটি শক্তিশালী টুল যা ডেটাবেসের সাথে কার্যকরভাবে কাজ করতে সাহায্য করে, তবে এর পারফরম্যান্স অপটিমাইজেশন গুরুত্বপূর্ণ বিষয়। Spring JDBC ব্যবহারের মাধ্যমে ডেটাবেস অপারেশনগুলি দক্ষভাবে পরিচালনা করা হলেও, কিছু নির্দিষ্ট কৌশল এবং পদ্ধতি অবলম্বন করলে পারফরম্যান্স আরও বৃদ্ধি করা সম্ভব। এখানে Spring JDBC ব্যবহার করে পারফরম্যান্স অপটিমাইজেশন করার কিছু সাধারণ কৌশল আলোচনা করা হবে।
Connection Pooling একটি গুরুত্বপূর্ণ কৌশল যা ডেটাবেস কানেকশনের সৃষ্টির খরচ কমায়। Spring JDBC কোনো একক কানেকশন তৈরি করে না প্রতি রিকোয়েস্টে, বরং এটি Connection Pool ব্যবহার করে।
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
config.setUsername("root");
config.setPassword("password");
config.setMaximumPoolSize(10); // Max number of connections in the pool
return new HikariDataSource(config);
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
Spring JDBC-তে Batch Processing ডেটাবেসে একাধিক SQL অপারেশন একসাথে একযোগে প্রেরণ করতে সাহায্য করে, যা পারফরম্যান্সের জন্য খুবই গুরুত্বপূর্ণ। বিশেষত, Insert, Update, বা Delete অপারেশনে যখন বড় পরিমাণ ডেটা প্রক্রিয়া করা হয়, তখন বাচ প্রোসেসিং ব্যবহারের মাধ্যমে ডেটাবেসে ব্যাচ আকারে কাজ করতে পারে, ফলে পরিমাণে দ্রুততর অপারেশন সম্ভব হয়।
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Repository;
@Repository
public class UserRepository {
@Autowired
private JdbcTemplate jdbcTemplate;
// Method to batch insert users
public void batchInsertUsers(List<User> users) {
String sql = "INSERT INTO users (user_name, email, age) VALUES (?, ?, ?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(java.sql.PreparedStatement ps, int i) throws java.sql.SQLException {
User user = users.get(i);
ps.setString(1, user.getName());
ps.setString(2, user.getEmail());
ps.setInt(3, user.getAge());
}
@Override
public int getBatchSize() {
return users.size();
}
});
}
}
এখানে:
batchUpdate
মেথডে একসাথে অনেকগুলো ইনসার্ট অপারেশন করা হচ্ছে।Spring JDBC-তে যখন বড় পরিমাণ ডেটা রিটার্ন করা হয়, তখন Lazy Loading
এবং Eager Loading
পদ্ধতির উপর গুরুত্ব দিতে হবে। সাধারাণত, Lazy Loading
ব্যবহারের মাধ্যমে অতিরিক্ত অপ্রয়োজনীয় ডেটা রিটার্ন হওয়া এড়ানো যায়।
ডেটাবেসে কার্যকরী কোয়েরি লেখা পারফরম্যান্সের জন্য অত্যন্ত গুরুত্বপূর্ণ। জটিল কোয়েরি, অপ্রয়োজনীয় সাবকোয়েরি, ইন্ডেক্সিং সমস্যাসহ অনেক কারণ ডেটাবেসের পারফরম্যান্সের উপর নেতিবাচক প্রভাব ফেলতে পারে।
SELECT *
পরিবর্তে নির্দিষ্ট কলাম নির্বাচন করা।String sql = "SELECT user_id, user_name, email FROM users WHERE age > :minAge";
এখানে, SELECT *
ব্যবহার না করে শুধু প্রয়োজনীয় কলামগুলোর নাম ব্যবহার করা হয়েছে, যা পারফরম্যান্সের জন্য ভাল।
Spring JDBC-তে ট্রানজেকশন ব্যবস্থাপনা ব্যবহারের মাধ্যমে আপনি ডেটাবেসের কাজগুলো একযোগে করতে পারেন এবং তাদের পারফরম্যান্স অপটিমাইজ করতে পারেন। সঠিকভাবে ট্রানজেকশন পরিচালনা করা গেলে, ব্যাচ অপারেশনগুলোর পারফরম্যান্স অনেক বৃদ্ধি পায়।
import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.stereotype.Service;
@Service
public class UserService {
private final JdbcTemplate jdbcTemplate;
public UserService(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
@Transactional
public void performTransactionalOperation() {
jdbcTemplate.update("UPDATE users SET age = ? WHERE user_id = ?", 25, 1);
jdbcTemplate.update("UPDATE users SET age = ? WHERE user_id = ?", 30, 2);
}
}
এখানে:
@Transactional
অ্যানোটেশন ব্যবহার করা হয়েছে, যা একাধিক ডেটাবেস অপারেশন একত্রে একটি ট্রানজেকশনে সম্পন্ন করতে সাহায্য করে।Spring JDBC-তে PreparedStatement
ব্যবহার করলে SQL ইনজেকশনের সমস্যা এড়ানো যায় এবং ডেটাবেসে পারফরম্যান্স আরও ভালো হয়। PreparedStatement ব্যবহার করা হলে কোয়েরি ক্যাশিং এবং কম্পাইলিং আরও দ্রুত হয়, কারণ SQL কোড একবার কম্পাইল হলে, পরবর্তী সময়ে সেটি পুনঃব্যবহৃত হতে পারে।
String sql = "SELECT * FROM users WHERE user_id = ?";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
User user = jdbcTemplate.queryForObject(sql, new Object[]{1}, new UserRowMapper());
এখানে:
?
ব্যবহার করে SQL কোয়েরি প্যারামিটারাইজ করা হয়েছে।Spring JDBC-তে পারফরম্যান্স অপটিমাইজেশনের জন্য কিছু গুরুত্বপূর্ণ কৌশলগুলি হল:
এই কৌশলগুলো ব্যবহারের মাধ্যমে আপনি Spring JDBC এর পারফরম্যান্সকে উল্লেখযোগ্যভাবে উন্নত করতে পারবেন।
Spring JDBC Performance Optimization একটি গুরুত্বপূর্ণ বিষয়, কারণ ডেটাবেস অপারেশনগুলি অ্যাপ্লিকেশন পারফরম্যান্সে বড় প্রভাব ফেলতে পারে। যখন Spring JDBC ব্যবহৃত হয়, তখন ডেটাবেস অ্যাক্সেস অপ্টিমাইজ করা উচিত যাতে অ্যাপ্লিকেশনটি দ্রুত, স্কেলেবল, এবং রেসপন্সিভ থাকে। এখানে কিছু সাধারণ কৌশল এবং বেস্ট প্র্যাকটিস দেয়া হয়েছে যেগুলি Spring JDBC-তে পারফরম্যান্স উন্নত করতে সাহায্য করবে।
ডেটাবেস কানেকশন পরিচালনা করতে একটি Connection Pool ব্যবহার করা অত্যন্ত গুরুত্বপূর্ণ। HikariCP, Tomcat Connection Pool, বা C3P0 মতো আধুনিক connection pool লাইব্রেরি ব্যবহার করলে অ্যাপ্লিকেশন ডেটাবেস কানেকশন খোলার ও বন্ধ করার খরচ কমে যায় এবং পারফরম্যান্স বৃদ্ধি পায়।
HikariCP সবচেয়ে জনপ্রিয় এবং উচ্চ পারফরম্যান্সের connection pool। Spring JDBC-তে HikariCP ইন্টিগ্রেট করার জন্য কনফিগারেশন নিচে দেখানো হলো:
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import org.springframework.jdbc.core.JdbcTemplate;
import javax.sql.DataSource;
@Configuration
public class DataSourceConfig {
@Bean
public DataSource dataSource() {
HikariConfig hikariConfig = new HikariConfig();
hikariConfig.setJdbcUrl("jdbc:mysql://localhost:3306/your_database");
hikariConfig.setUsername("your_username");
hikariConfig.setPassword("your_password");
hikariConfig.setDriverClassName("com.mysql.cj.jdbc.Driver");
hikariConfig.setMaximumPoolSize(10); // Maximum connection pool size
hikariConfig.setMinimumIdle(5); // Minimum idle connections
return new HikariDataSource(hikariConfig);
}
@Bean
public JdbcTemplate jdbcTemplate(DataSource dataSource) {
return new JdbcTemplate(dataSource);
}
}
যখন অনেক ডেটাবেস অপারেশন একসাথে করা হয় (যেমন একাধিক INSERT
বা UPDATE
অপারেশন), তখন batch processing ব্যবহার করা উচিত। এতে নেটওয়ার্ক কল এবং ডেটাবেস লকিং কমে যায়, যা পারফরম্যান্স উন্নত করে।
Spring JDBC-তে batch update ব্যবহার করার উদাহরণ:
import org.springframework.jdbc.core.BatchPreparedStatementSetter;
import org.springframework.jdbc.core.JdbcTemplate;
import java.sql.PreparedStatement;
import java.sql.SQLException;
public class EmployeeDAO {
private final JdbcTemplate jdbcTemplate;
public EmployeeDAO(JdbcTemplate jdbcTemplate) {
this.jdbcTemplate = jdbcTemplate;
}
public void batchInsertEmployees(List<Employee> employees) {
String sql = "INSERT INTO Employee (id, name, salary) VALUES (?, ?, ?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
public void setValues(PreparedStatement ps, int i) throws SQLException {
Employee employee = employees.get(i);
ps.setInt(1, employee.getId());
ps.setString(2, employee.getName());
ps.setDouble(3, employee.getSalary());
}
public int getBatchSize() {
return employees.size();
}
});
}
}
PreparedStatement
ব্যবহার করলে SQL কোডের পুনরায় এক্সিকিউশনের সময় কমে যায় এবং এটি SQL ইনজেকশনের আক্রমণ থেকে রক্ষা করে। Spring JDBC তে, JdbcTemplate
PreparedStatement
এর মাধ্যমে ডেটাবেস অপারেশন করে।
String sql = "INSERT INTO Employee (id, name, salary) VALUES (?, ?, ?)";
jdbcTemplate.update(sql, id, name, salary);
এখানে, PreparedStatement
ব্যবহার করা হয়েছে যা পারফরম্যান্স এবং নিরাপত্তা উভয় দিকেই সাহায্য করে।
Spring JDBC এবং JPA/Hibernate এর মধ্যে একটি পার্থক্য হল Lazy Loading এবং Eager Loading। যদি একাধিক সম্পর্কযুক্ত ডেটা একসাথে লোড করা না হয়, তবে এটি পারফরম্যান্সের উপর প্রভাব ফেলতে পারে। যখন Lazy Loading ব্যবহার করা হয়, তখন শুধুমাত্র প্রয়োজনীয় ডেটা লোড করা হয়। কিন্তু Eager Loading তে সম্পর্কিত সব ডেটা একসাথে লোড করা হয়, যা অধিক সময় নিতে পারে।
Spring JDBC-তে, যখন বড় পরিমাণ ডেটা লোড করতে হয়, তখন Lazy Loading বা Manual Fetching ব্যবহার করা উচিত।
ডেটাবেস থেকে বারবার একই ডেটা পাঠানো পারফরম্যান্সের জন্য ক্ষতিকর হতে পারে। এই ক্ষেত্রে, caching ব্যবহার করা একটি কার্যকর কৌশল। Spring Caching বা 3rd-party ক্যাশিং লাইব্রেরি (যেমন EHCache, Redis) ব্যবহার করে পুনরাবৃত্তি ডেটা অ্যাক্সেস কমানো যেতে পারে।
Spring Caching কনফিগারেশন:
@EnableCaching
@Configuration
public class CacheConfig {
@Bean
public CacheManager cacheManager() {
return new ConcurrentMapCacheManager("employees");
}
}
এখানে, employees ক্যাশের মাধ্যমে ডেটা পুনরায় লোড করার পরিবর্তে ক্যাশে থেকে সরাসরি ডেটা পাওয়া যাবে।
ব্যবহারকারী বা অ্যাপ্লিকেশন এর অ্যাক্সেসের মধ্যে ট্রানজেকশন ব্যাবস্থাপনা একটি গুরুত্বপূর্ণ ভূমিকা পালন করে। সঠিক ট্রানজেকশন কনফিগারেশন ডেটাবেস এক্সিকিউশন অপ্টিমাইজ করতে সাহায্য করে।
Spring JDBC-তে ট্রানজেকশন পরিচালনা করতে PlatformTransactionManager
ব্যবহার করা হয়।
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.TransactionDefinition;
import org.springframework.transaction.TransactionStatus;
import org.springframework.transaction.support.DefaultTransactionDefinition;
public class TransactionExample {
private final PlatformTransactionManager transactionManager;
public TransactionExample(PlatformTransactionManager transactionManager) {
this.transactionManager = transactionManager;
}
public void processTransaction() {
TransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = transactionManager.getTransaction(def);
try {
// ডেটাবেস অপারেশন
transactionManager.commit(status); // Commit
} catch (RuntimeException e) {
transactionManager.rollback(status); // Rollback
throw e;
}
}
}
ডেটাবেসের পারফরম্যান্স উন্নত করার জন্য SQL কোয়েরির অপ্টিমাইজেশন অত্যন্ত গুরুত্বপূর্ণ। কিছু সাধারণ কৌশল:
INDEX
ব্যবহার করা।LIMIT
বা OFFSET
ব্যবহার করা।ডেটাবেস কানেকশন লিকগুলি পারফরম্যান্স সমস্যা সৃষ্টি করতে পারে। HikariCP বা অন্য কোন connection pool এর মাধ্যমে কানেকশন লিক সনাক্তকরণ সক্ষম করা উচিত।
spring.datasource.hikari.leakDetectionThreshold=2000
এটি কানেকশনটি লিক হওয়ার জন্য কত সময় অপেক্ষা করতে হবে তা নির্ধারণ করে। 2000
মিলিসেকেন্ড মানে কানেকশন লিক হলে 2 সেকেন্ড পরে একটি লগ আউটপুট দেখাবে।
Spring JDBC-তে পারফরম্যান্স অপ্টিমাইজ করার জন্য বিভিন্ন কৌশল রয়েছে, যেমন connection pooling, batch processing, prepared statements, caching, transaction management ইত্যাদি। এগুলি ব্যবহার করে আপনি আপনার অ্যাপ্লিকেশনের পারফরম্যান্স বৃদ্ধি করতে পারেন। কখনো কখনো, বিভিন্ন কৌশল একসাথে ব্যবহার করলে সেরা ফলাফল পাওয়া যায়।
Spring JDBC-তে ডেটাবেসের কার্যক্ষমতা বাড়ানোর জন্য কিছু কার্যকর Querying Techniques এবং Connection Pooling পদ্ধতি ব্যবহার করা হয়। এটি ডেটাবেস সংক্রান্ত অপারেশন দ্রুত এবং কার্যকর করতে সহায়তা করে।
SQL ইনজেকশন থেকে রক্ষা পেতে এবং ডেটা প্রসেসিং দ্রুত করতে Parameterized Queries ব্যবহার করুন।
String sql = "SELECT * FROM users WHERE email = ?";
String email = "john@example.com";
User user = jdbcTemplate.queryForObject(sql, new Object[]{email}, new BeanPropertyRowMapper<>(User.class));
একাধিক ডেটা ইনসার্ট, আপডেট, বা ডিলিট অপারেশনের ক্ষেত্রে batch processing কার্যক্ষমতা বাড়ায়।
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
List<Object[]> batchArgs = Arrays.asList(
new Object[]{"John", "john@example.com"},
new Object[]{"Jane", "jane@example.com"},
new Object[]{"Bob", "bob@example.com"}
);
jdbcTemplate.batchUpdate(sql, batchArgs);
বড় ডেটাসেট থেকে ডেটা ফিল্টার করতে LIMIT এবং OFFSET ব্যবহার করুন।
String sql = "SELECT * FROM users LIMIT ? OFFSET ?";
List<User> users = jdbcTemplate.query(sql, new Object[]{10, 20}, new BeanPropertyRowMapper<>(User.class));
Indexed Parameters (?
) এর পরিবর্তে Named Parameters ব্যবহার করতে পারেন, যা কোডটি আরও রিডেবল করে।
String sql = "SELECT * FROM users WHERE email = :email";
Map<String, Object> params = new HashMap<>();
params.put("email", "john@example.com");
User user = namedParameterJdbcTemplate.queryForObject(sql, params, new BeanPropertyRowMapper<>(User.class));
ডেটাবেস থেকে জটিল ডেটা প্রসেস করার জন্য RowMapper বা ResultSetExtractor ব্যবহার করুন। এটি কোডকে সহজ এবং পুনঃব্যবহারযোগ্য করে।
String sql = "SELECT * FROM users";
List<User> users = jdbcTemplate.query(sql, new UserRowMapper());
ডেটাবেসের সাথে সংযোগ তৈরির সময় গুরুত্বপূর্ণ। Connection Pooling পদ্ধতি সংযোগ তৈরির ও ব্যবস্থাপনার সময় কমিয়ে কার্যক্ষমতা বৃদ্ধি করে।
Spring JDBC-তে বেশ কিছু জনপ্রিয় Connection Pooling লাইব্রেরি সমর্থিত:
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>5.0.1</version>
</dependency>
import com.zaxxer.hikari.HikariConfig;
import com.zaxxer.hikari.HikariDataSource;
import javax.sql.DataSource;
public class HikariCPConfig {
public DataSource dataSource() {
HikariConfig config = new HikariConfig();
config.setJdbcUrl("jdbc:mysql://localhost:3306/your_database");
config.setUsername("your_username");
config.setPassword("your_password");
config.setMaximumPoolSize(10); // Connection pool size
config.setMinimumIdle(2); // Minimum idle connections
config.setIdleTimeout(30000); // Idle timeout in milliseconds
config.setMaxLifetime(1800000); // Maximum lifetime of a connection
return new HikariDataSource(config);
}
}
HikariCPConfig config = new HikariCPConfig();
DataSource dataSource = config.dataSource();
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-dbcp2</artifactId>
<version>2.9.0</version>
</dependency>
import org.apache.commons.dbcp2.BasicDataSource;
import javax.sql.DataSource;
public class ApacheDBCPConfig {
public DataSource dataSource() {
BasicDataSource dataSource = new BasicDataSource();
dataSource.setUrl("jdbc:mysql://localhost:3306/your_database");
dataSource.setUsername("your_username");
dataSource.setPassword("your_password");
dataSource.setMaxTotal(10); // Maximum connections
dataSource.setMaxIdle(5); // Maximum idle connections
dataSource.setMinIdle(2); // Minimum idle connections
dataSource.setInitialSize(5); // Initial connections
return dataSource;
}
}
Spring JDBC-তে কার্যক্ষমতা বাড়ানোর জন্য Efficient Querying Techniques এবং Connection Pooling একত্রে ব্যবহার করা উচিত। এতে ডেটাবেস অ্যাক্সেস দ্রুত হয় এবং সংযোগ ব্যবস্থাপনার জন্য কম সিস্টেম রিসোর্স প্রয়োজন হয়।
উপসংহার:
Spring JDBC-তে Querying Techniques এবং Connection Pooling একসঙ্গে ব্যবহার করলে ডেটাবেস অপারেশন অনেক দ্রুত এবং নির্ভরযোগ্য হয়। HikariCP-এর মতো উন্নত Connection Pooling লাইব্রেরি এবং Parameterized Queries বা Batch Processing ব্যবহার করলে অ্যাপ্লিকেশনের কার্যক্ষমতা আরও বৃদ্ধি পায়।
Spring JDBC ব্যবহারের সময় ডাটাবেস অপারেশনের পারফরম্যান্স উন্নত করা গুরুত্বপূর্ণ, বিশেষত বড় অ্যাপ্লিকেশন বা জটিল ডাটাবেস অপারেশনের ক্ষেত্রে। কিছু সাধারণ Performance Optimization টেকনিক ব্যবহার করে ডাটাবেস অ্যাক্সেস আরও কার্যকর করা যায়।
একাধিক রেকর্ড ইনসার্ট বা আপডেট করার জন্য Batch Processing ব্যবহার করলে অপারেশন আরও দ্রুত হয়, কারণ একাধিক স্টেটমেন্ট একত্রে চালানো হয়।
String sql = "INSERT INTO users (name, email) VALUES (?, ?)";
jdbcTemplate.batchUpdate(sql, new BatchPreparedStatementSetter() {
@Override
public void setValues(PreparedStatement ps, int i) throws SQLException {
ps.setString(1, "User " + i);
ps.setString(2, "user" + i + "@example.com");
}
@Override
public int getBatchSize() {
return 100; // 100 রেকর্ড একত্রে প্রসেস হবে
}
});
System.out.println("Batch insertion completed!");
PreparedStatement পুনরায় ব্যবহার করলে ডাটাবেসের লোড কমে এবং অপারেশন দ্রুত হয়।
String sql = "SELECT * FROM users WHERE email = ?";
List<User> users = jdbcTemplate.query(sql, new Object[]{"example@example.com"}, new BeanPropertyRowMapper<>(User.class));
Connection Pooling ডাটাবেস কানেকশনের পুনঃব্যবহার নিশ্চিত করে, যা কানেকশন তৈরির সময় এবং রিসোর্সের অপচয় কমায়।
@Bean
public DataSource dataSource() {
HikariDataSource dataSource = new HikariDataSource();
dataSource.setJdbcUrl("jdbc:mysql://localhost:3306/mydb");
dataSource.setUsername("root");
dataSource.setPassword("password");
dataSource.setMaximumPoolSize(10); // Max 10 connections
return dataSource;
}
ডাটাবেস টেবিলে সঠিক ইনডেক্স যোগ করে কোয়েরি এক্সিকিউশন টাইম কমানো যায়।
CREATE INDEX idx_email ON users(email);
String sql = "SELECT * FROM users WHERE email = ?";
User user = jdbcTemplate.queryForObject(sql, new Object[]{"example@example.com"}, new BeanPropertyRowMapper<>(User.class));
বড় ডাটাসেট ফিল্টার করার সময় Pagination ব্যবহার করলে পারফরম্যান্স উন্নত হয়।
String sql = "SELECT * FROM users LIMIT ? OFFSET ?";
List<User> users = jdbcTemplate.query(sql, new Object[]{10, 20}, new BeanPropertyRowMapper<>(User.class));
যদি একাধিক রেকর্ড প্রসেস করতে হয়, তাহলে ResultSetExtractor ব্যবহার করলে পারফরম্যান্স আরও উন্নত হয়।
public class UserResultSetExtractor implements ResultSetExtractor<List<User>> {
@Override
public List<User> extractData(ResultSet rs) throws SQLException {
List<User> users = new ArrayList<>();
while (rs.next()) {
User user = new User();
user.setId(rs.getInt("id"));
user.setName(rs.getString("name"));
user.setEmail(rs.getString("email"));
users.add(user);
}
return users;
}
}
// JdbcTemplate query:
String sql = "SELECT * FROM users";
List<User> users = jdbcTemplate.query(sql, new UserResultSetExtractor());
Lazy Loading বড় ডেটাসেট প্রসেস করার সময় ডেটা লোডিং বিলম্বিত করে। Fetch Size ব্যবহার করে ডেটা পর্যায়ক্রমে লোড করা যায়।
jdbcTemplate.setFetchSize(50); // প্রতি বার ৫০ রেকর্ড ফেচ করবে
String sql = "SELECT * FROM users";
jdbcTemplate.query(sql, rs -> {
while (rs.next()) {
System.out.println("User: " + rs.getString("name"));
}
});
Spring JDBC-তে Performance Optimization করার জন্য উপরের টেকনিকগুলো কার্যকরভাবে ব্যবহার করা যেতে পারে। বিশেষত:
সঠিক অপ্টিমাইজেশন টেকনিক ব্যবহার করে আপনি Spring JDBC-তে ডাটাবেস অ্যাক্সেস আরও দ্রুত এবং কার্যকর করতে পারবেন।
Read more